package com.huawei.account.util;

import org.apache.http.Header;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import com.alibaba.fastjson2.JSONObject;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

/**
 * HTTP请求工具类，封装请求发送和响应处理
 */
public class CallUtils {

    /**
     * 发送OAuth相关的HTTP请求（通用方法）
     * @param request HTTP请求对象（如HttpPost、HttpGet等）
     * @return 响应体字符串
     * @throws IOException 发生网络异常时抛出
     */
    public static String remoteCallOAuth(HttpUriRequest request) throws IOException {
        // 创建默认的HttpClient
        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
            // 发送请求并获取响应（自动关闭响应资源）
            try (CloseableHttpResponse response = httpClient.execute(request)) {
                // 检查响应状态码（200表示成功）
                int statusCode = response.getStatusLine().getStatusCode();
                if (statusCode < 200 || statusCode >= 300) {
                    throw new IOException("请求失败，状态码：" + statusCode);
                }
                // 读取响应体（指定UTF-8编码）
                return EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
            }
        }
    }

    /**
     * 将字符串转换为JSONObject
     * @param jsonStr JSON格式的字符串
     * @return 转换后的JSONObject
     */
    public static JSONObject toJsonObject(String jsonStr) {
        if (jsonStr == null || jsonStr.isEmpty()) {
            throw new IllegalArgumentException("JSON字符串不能为空");
        }
        // 使用fastjson2转换
        return JSONObject.parseObject(jsonStr);
    }
}
